package bbs.web.control;

import java.util.*;

import javax.servlet.http.*;

import org.apache.ibatis.session.SqlSession;
import org.apache.logging.log4j.*; 
import org.springframework.stereotype.*;
import org.springframework.ui.*;
import org.springframework.web.bind.annotation.*; 

import bbs.model.*;
import bbs.tran.*;

@Controller
public class BoardController extends WebController {

	/**
	 * Log4j logger
	 */
	static final Logger logger = LogManager.getLogger(BoardController.class);
	
	@RequestMapping(value="/bbsBoardList.con", method = {RequestMethod.GET, RequestMethod.POST} )
    public String boardList( Model model , HttpServletRequest request ,
    		@RequestParam(value="boardName", 		required=false, defaultValue="" ) String boardName ,
    		@RequestParam(value="createNewBoard", 	required=false, defaultValue="-1" ) Integer createNewBoard ,
    		@RequestParam(value="newBoardName", 	required=false, defaultValue="" ) String newBoardName ,
    		@RequestParam(value="viewPageNo", 		required=false, defaultValue="1") Integer viewPageNo ) {
		
		logger.trace( "boardName: " + boardName + "; newBoardName: " + newBoardName );
		
		String svrMsg = "게시판에 오신 것을 환영합니다.";
    	String errMsg = "" ;  
    	
    	BbsSystem bbsSystem = this.bbsSystem;
    	User loginUser = bbsSystem.getLoginUser( request );
    	
    	if( loginUser == null ) {
    		// 로그인 사용자가 없으면,
    		// 로그인 화면으로 이동한다. 
    		if( this.isForcedUserLoginAtFirst() ) { 
    			return "redirect:bbsUserLogin.con" ;
    		}
    	}
    	
    	SqlSession session = bbsSystem.getSqlSession(); 
    	
    	if( createNewBoard != null && createNewBoard > 0 ) { 
    		newBoardName = newBoardName == null ? null : newBoardName.trim();
    		if( newBoardName == null || newBoardName.length() < 1 ) {
    			svrMsg = "게시판 이름을 입력하세요.";
    		} else if( newBoardName != null && newBoardName.length() > 0 ) { 
	    		if( loginUser == null ) {
	    			svrMsg = "게시판을 만들기 위해서 사용자 로그인이 필요합니다." ;
	    		} else if( loginUser != null ) { 
		    		// 새 게시판을 DB에 입력한다.
		    		int updCnt = bbsSystem.createNewBoard(session, loginUser, newBoardName);
		    		if( updCnt < 1 ) {
		    			svrMsg = "새 게시판 생성 실패";
		    		} else if( updCnt > 0 ) {
		    			svrMsg = "새 게시판이 생성되었습니다.";
		    		}
	    		}
	    	}
    	}
    	
    	Boolean boardValid = true;
    	List<Board> boards = bbsSystem.getAllBoards( session, loginUser, boardValid, viewPageNo );
    	
    	session.close(); 
    	
    	logger.trace( "boards size: " + boards.size() );
    	
    	model.addAttribute( "boards", 		boards 		);
    	
    	model.addAttribute( "svrMsg", 		svrMsg 		);
    	model.addAttribute( "errMsg", 		errMsg 		);  
    	
		return "bbs_board_list.html";
	}
	
}
